x86, hvm: MTRR can't cover all the memery ranges
authorKeir Fraser <keir.fraser@citrix.com>
Thu, 24 Jan 2008 14:40:35 +0000 (14:40 +0000)
committerKeir Fraser <keir.fraser@citrix.com>
Thu, 24 Jan 2008 14:40:35 +0000 (14:40 +0000)
MTRR can't cover all the memery ranges, due to guest E820 is changed
by CS:16728 with current method.
Signed-off-by: Disheng Su <disheng.su@intel.com>
xen/arch/x86/hvm/mtrr.c

index cfa8f9038969f783c73c5e482dd98d903f4a4e61..3bd0dc9d7ce249882d96c824144c5e79ebef3a84 100644 (file)
@@ -186,7 +186,14 @@ static uint32_t range_to_mtrr(uint32_t reg, struct mtrr_state *m,
                               uint8_t type)
 {
     if ( !range_sizek || (reg >= ((m->mtrr_cap & 0xff) - RESERVED_MTRR)) )
+    {
+        gdprintk(XENLOG_WARNING,
+                "Failed to init var mtrr msr[%d]"
+                "range_size:%x, total available MSR:%d\n",
+                reg, range_sizek,
+                (uint32_t)((m->mtrr_cap & 0xff) - RESERVED_MTRR));
         return reg;
+    }
 
     while ( range_sizek )
     {
@@ -202,7 +209,13 @@ static uint32_t range_to_mtrr(uint32_t reg, struct mtrr_state *m,
         range_sizek  -= sizek;
 
         if ( reg >= ((m->mtrr_cap & 0xff) - RESERVED_MTRR) )
+        {
+            gdprintk(XENLOG_WARNING,
+                    "Failed to init var mtrr msr[%d],"
+                    "total available MSR:%d\n",
+                    reg, (uint32_t)((m->mtrr_cap & 0xff) - RESERVED_MTRR));
             break;
+        }
     }
 
     return reg;
@@ -253,7 +266,7 @@ static void setup_var_mtrrs(struct vcpu *v)
         {
             if ( e820_table[i].addr == 0x100000 )
             {
-                size = e820_table[i].size + 0x100000 + PAGE_SIZE * 3;
+                size = e820_table[i].size + 0x100000 + PAGE_SIZE * 4;
                 addr = 0;
             }
             else